<?php
/**
 * Model de Tarefa
 * @filesource  06/04/2011
 * @author      Estrada Virtual <http://estradavirtual.com.br>
 * @copyright   Copyright <2011> Estrada Virtual
 * @package     <<application>>
 * @subpackage  <<application>>.application.models
 * @version     $Id$
 */
class Model_Tarefa extends App_Db_Table
{
    const SITUACAO_NAO_INICIADA = 'N';
    const SITUACAO_ABERTA       = 'A';
    const SITUACAO_FINALIZADA   = 'F';
    const SITUACAO_CONGELADA    = 'C';
    const SITUACAO_PREVISAO_S   = 'S';
    const SITUACAO_PREVISAO_N   = 'N';

    protected $_name             = 'tarefa';
    protected $_primary          = array('id_tarefa');
    protected $_dependentTables  = array( 'Anotacao', 'Artefato', 'TarefaAtividade','Model_ProcessoTarefa');

    protected $_referenceMap     = array(
                    'Projeto' => array(
                            'columns'       => 'fk_projeto',
                            'refTableClass' => 'Model_Projeto',
                            'refColumns'    => 'id_projeto',
                         ),
                    'Servico' => array(
                            'columns'       => 'fk_servico',
                            'refTableClass' => 'Model_Servico',
                            'refColumns'    => 'id_servico',
                         ),                
                    'Usuario' => array(
                            'columns'       => 'fk_usuario',
                            'refTableClass' => 'Model_Usuario',
                            'refColumns'    => 'id_usuario',
                         ));


    public function getSituacoes()
    {
        return array(Model_Tarefa::SITUACAO_ABERTA       => 'Aberta',
                     Model_Tarefa::SITUACAO_NAO_INICIADA => 'Não iniciada',
                     Model_Tarefa::SITUACAO_FINALIZADA   => 'Finalizada',
                     Model_Tarefa::SITUACAO_CONGELADA    => 'Congelada'
                     );
    }

    public function getTarefasAgrupadas(array $aFiltro = null)
    {

        $select = $this->getDefaultAdapter()
                       ->select()
                       ->from(array('t'=>'tarefa'))
                       ->columns(array('dias' => 'coalesce(datediff(now(), t.dt_inicio), 0)'))
                       ->join(array('p'=>'projeto'), 'p.id_projeto = t.fk_projeto', array('projeto'=>'st_nome', 'fk_apoio_situacao'))
                       ->join(array('c'=>'cliente'), 'c.id_cliente = p.fk_cliente', array('cliente'=>'st_nome'))
                       ->order(array('p.st_nome', 'dt_cadastro'))
                       ;
        if ($aFiltro) {
            foreach ($aFiltro as $filtro => $valor) {
                $select->where($filtro, $valor);
            }
        }

        $rowSet = $select->query()->fetchAll();

        $arAgrupado = array();
        foreach($rowSet as $row){
            $arAgrupado[$row->fk_projeto . ' - ' . $row->projeto][] = $row;
        }
        return $arAgrupado;
    }

    public function getQuantidadeTarefasPorSituacao($fk_projeto)
    {
        $select = $this->getDefaultAdapter()->select()
                       ->from(array('t'=>'tarefa'), array('qtd'=>'count(*)', 'cs_situacao'))
                       ->where('fk_projeto = ?', $fk_projeto)
                       ->group('cs_situacao')
                       ;

        $rowSet = $select->query()->fetchAll();

        $arQuantidade = array('A'=>0, 'N'=>0, 'F'=>0, 'C'=>0);
        foreach($rowSet as $row){
            $arQuantidade[$row->cs_situacao] = $row->qtd;
        }
        return $arQuantidade;
    }

    static function getPrevisao()
    {
        return array(Model_Tarefa::SITUACAO_PREVISAO_S => 'Sim', Model_Tarefa::SITUACAO_PREVISAO_N => 'Não');
    }

    public function somarHoras($id_tarefa)
    {
        $db = Zend_Db_Table::getDefaultAdapter();
        $sql = 'select SEC_TO_TIME(sum(TIME_TO_SEC(qt_horas))) as qt_horas from tarefa_atividade WHERE fk_tarefa = ' . $id_tarefa;
        return $db->query($sql)->fetchObject()->qt_horas;
    }

}
